﻿#include "study09.h"
#include "test_base.h"
// C/C++ 标准库学习网站：https://legacy.cplusplus.com
// C/C++ 微软(Visual Studio)中文学习网站：https://learn.microsoft.com/zh-cn/cpp/cpp/?view=msvc-170

void test_smart_pointer() {
	using namespace std; // 命名空间声明

	// 1. make_unique
	{
		Timer timer("make unique_ptr");
		array<unique_ptr<Vector2>, 100> p1; // 100 个 Vector2 指针的数组 p1 使用栈区内存
		for (int i = 0; i < p1.size(); i++) {
			p1[i] = make_unique<Vector2>(); // 使用 make_unique 创建 100 个 Vector2 指针
		}
	}

	// 2. make_shared
	{
		Timer timer("make shared_ptr");
		array<shared_ptr<Vector2>, 100> p2;
		for (int i = 0; i < p2.size(); i++) {
			p2[i] = make_shared<Vector2>(); // 使用 make_shared 创建 100 个 Vector2 指针
		}
	}

	// 3. new + make_shared
	{
		Timer timer("make shared_ptr with new");
		array<shared_ptr<Vector2>, 100> p3;
		for (int i = 0; i < p3.size(); i++) {
			p3[i] = shared_ptr<Vector2>(new Vector2((i + 1), (i + 1) * (i + 1)));
		}
	}
}
